import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * la clase Phantom hereda de la clase Enemy la variable de salud health
 * 
 * @author (Octavio y Cesar) 
 * @version (2014.11.28)
 */
public class Phantom extends Enemy
{
    private Timer time;
    private  Guns gun;
    private int xPos;
    private int yPos;
    private int xRadius;
    private int yRadius;
    private double angle;
   
    /**
     * constructor de variables de la clase Phantom
     * @param un angulo, posision en x y posision en y.
     */
    public Phantom(double angle, int xPos, int yPos)
    {

        super(150,0);
        gun=new Guns();
        time=new Timer();

        this.angle=3.1416D/180*angle;
        this.xPos=xPos;
        this.yPos=yPos;
        this.yRadius=50;
        this.xRadius=50;

    }
    
    /**
     * contructor sobrecargado de la clase Phantom
     * @param angulo, posision en x, posision en y, radio en x, radio en y
     */
    public Phantom(double angle, int xPos, int yPos, int xRadius, int yRadius)
    {
        
        super(150,0);
        gun=new Guns();
        time=new Timer();

        GreenfootImage image=getImage();
        image.scale(40,40);
        image.rotate(-90);
        setImage(image);

        this.angle=3.1416D/180*angle;
        this.xPos=xPos;
        this.yPos=yPos;
        this.yRadius=60;
        this.xRadius=80;

        // direction=dir;
    }

    public void act()
    {
        this.fly();
        this.shoot();
        super.checaVida();
        this.sumaPuntos();
    }
    
    /**
     * metodo que mueve al phantom en forma de circulo o elipse dependiendo el valor
     * que se le de al radio
     */
    public void fly() 
    {
        double x = (Math.cos(angle) * xRadius + xPos);
        double y = (Math.sin(angle) * yRadius + yPos);

        setLocation((int)x,(int)y);

        angle+=0.1;

        if(angle>=2D*3.1416D)
            angle=0; 
    } 
    
    /**
     *iguala la posision inicial con la posision actual en x e y
     */
    public void changeCenter(int xPos, int yPos)
    {
        this.xPos=xPos;
        this.yPos=yPos;
    }

    /**
     * crea la bala del phantom y reproduce el sonido de la bala
     */
    public void shoot()
    {
        GreenfootSound bulletSound=new GreenfootSound("boom.wav");
       
        time.increases();
        if(time.getTime()==80)
        {

            Guns bullet; 
            bullet= new EBullet();
            GreenfootImage myImage=this.getImage();
            getWorld().addObject(bullet,this.getX(),this.getY()+myImage.getHeight());
            bulletSound.setVolume(30);
            bulletSound.play();
            time.reset();
        }

        }

         /**
          * checa si la salud de la nave llega a cero y le suma una cantidad de puntos al heroe
          */
      public void sumaPuntos()
    {
        if(getHealth()<0)
         {
            ((Space)getWorld()).getHero().setPoints(200);
            (new GreenfootSound("exploPop.wav")).play();
            getWorld().removeObject(this);  
         }
    }
}   
